package cn.always.xiajia.framework.common.mybatisplus.util;

import java.io.Serializable;

import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;

/**
 * MybatisPlus增强工具类
 *
 **/
public class ExtPlusUtils {

	/**
	 * 获取当前DO实体类主键值
	 *
	 * @param tableInfo 表信息实例
	 * @param e DO实体类
	 * @param <E> DO实体类类型
	 * @param <R> 主键的类型
	 * @return 主键值
	 */
	@SuppressWarnings("unchecked")
	public static <E, R> R pkVal(TableInfo tableInfo, E e) {
		String keyProperty = tableInfo.getKeyProperty();
		return (R) tableInfo.getPropertyValue(e, keyProperty);
	}

	/**
	 * 获取当前DO实体类主键值
	 *
	 * @param entity 实体类实例
	 * @param clazz 实体类Class对象
	 * @param <T> 实体类类型
	 * @return 主键值
	 */
	public static <T, S extends Serializable> S pkVal(T entity, Class<T> clazz) {
		TableInfo tableInfo = TableInfoHelper.getTableInfo(clazz);
		return pkVal(tableInfo, entity);
	}

}
